home *** CD-ROM | disk | FTP | other *** search
-
- ; Listing7s.s ANZEIGEN VON !& SPRITES
-
- ; In diesem Listing wird die Wiederverwendung der Sprite gezeigt.
- ; Mit der linken Maustaste ändern die Sprites Position.
- ; Rechte Taste zum Aussteigen.
-
- SECTION CiriCop,CODE
-
- Anfang:
- move.l 4.w,a6 ; Execbase
- jsr -$78(a6) ; Disable
- lea GfxName(PC),a1 ; Name lib
- jsr -$198(a6) ; OpenLibrary
- move.l d0,GfxBase
- move.l d0,a6
- move.l $26(a6),OldCop
-
-
- MOVE.L #BITPLANE,d0
- LEA BPLPOINTERS,A1
- move.w d0,6(a1)
- swap d0
- move.w d0,2(a1)
-
- ; Pointen auf die Sprite
-
- MOVE.L #MEINSPRITE0,d0 ; Adresse des Sprite in d0
- LEA SpritePointers,a1 ; Pointer in der Copperlist
- move.w d0,6(a1)
- swap d0
- move.w d0,2(a1)
- MOVE.L #MEINSPRITE1,d0 ; Adresse des Sprite in d0
- addq.w #8,a1 ; nächten SPRITEPOINTERS
- move.w d0,6(a1)
- swap d0
- move.w d0,2(a1)
- MOVE.L #MEINSPRITE2,d0 ; Adresse des Sprite in d0
- addq.w #8,a1 ; nächten SPRITEPOINTERS
- move.w d0,6(a1)
- swap d0
- move.w d0,2(a1)
- MOVE.L #MEINSPRITE3,d0 ; Adresse des Sprite in d0
- addq.w #8,a1 ; nächten SPRITEPOINTERS
- move.w d0,6(a1)
- swap d0
- move.w d0,2(a1)
- MOVE.L #MEINSPRITE4,d0 ; Adresse des Sprite in d0
- addq.w #8,a1 ; nächten SPRITEPOINTERS
- move.w d0,6(a1)
- swap d0
- move.w d0,2(a1)
- MOVE.L #MEINSPRITE5,d0 ; Adresse des Sprite in d0
- addq.w #8,a1 ; nächten SPRITEPOINTERS
- move.w d0,6(a1)
- swap d0
- move.w d0,2(a1)
- MOVE.L #MEINSPRITE6,d0 ; Adresse des Sprite in d0
- addq.w #8,a1 ; nächten SPRITEPOINTERS
- move.w d0,6(a1)
- swap d0
- move.w d0,2(a1)
- MOVE.L #MEINSPRITE7,d0 ; Adresse des Sprite in d0
- addq.w #8,a1 ; nächten SPRITEPOINTERS
- move.w d0,6(a1)
- swap d0
- move.w d0,2(a1)
-
- ; Spritepositionen
-
- MOVE.B #$2C+50,VSTART0
- MOVE.B #$2C+50+8,VSTOP0
- MOVE.B #$2C+50,VSTART1
- MOVE.B #$2C+50+8,VSTOP1
- MOVE.B #$2C+50,VSTART2
- MOVE.B #$2C+50+8,VSTOP2
- MOVE.B #$2C+50,VSTART3
- MOVE.B #$2C+50+8,VSTOP3
- MOVE.B #$2C+50,VSTART4
- MOVE.B #$2C+50+8,VSTOP4
- MOVE.B #$2C+50,VSTART5
- MOVE.B #$2C+50+8,VSTOP5
- MOVE.B #$2C+50,VSTART6
- MOVE.B #$2C+50+8,VSTOP6
- MOVE.B #$2C+50,VSTART7
- MOVE.B #$2C+50+8,VSTOP7
-
- ; hier beginnen die "wiederverwendeten" Sprites
-
- MOVE.B #$2C+90,VSTART8
- MOVE.B #$2C+90+8,VSTOP8
- MOVE.B #$2C+90,VSTART9
- MOVE.B #$2C+90+8,VSTOP9
- MOVE.B #$2C+90,VSTART10
- MOVE.B #$2C+90+8,VSTOP10
- MOVE.B #$2C+90,VSTART11
- MOVE.B #$2C+90+8,VSTOP11
- MOVE.B #$2C+90,VSTART12
- MOVE.B #$2C+90+8,VSTOP12
- MOVE.B #$2C+90,VSTART13
- MOVE.B #$2C+90+8,VSTOP13
- MOVE.B #$2C+90,VSTART14
- MOVE.B #$2C+90+8,VSTOP14
- MOVE.B #$2C+90,VSTART15
- MOVE.B #$2C+90+8,VSTOP15
-
- move.l #COPPERLIST,$dff080 ; unsere COP
- move.w d0,$dff088 ; START COP
- move.w #0,$dff1fc ; NO AGA!
- move.w #$c00,$dff106 ; NO AGA!
-
- Mouse1:
- btst #6,$bfe001 ; linke Maustaste gedrückt?
- bne.s mouse1
-
- ; gibt neue vertikale Positionen ein
-
- MOVE.B #$2C+10,VSTART0
- MOVE.B #$2C+10+8,VSTOP0
- MOVE.B #$2C+10+8*1,VSTART1
- MOVE.B #$2C+10+8*1+8,VSTOP1
- MOVE.B #$2C+10+8*2,VSTART2
- MOVE.B #$2C+10+8*2+8,VSTOP2
- MOVE.B #$2C+10+8*3,VSTART3
- MOVE.B #$2C+10+8*3+8,VSTOP3
- MOVE.B #$2C+10+8*4,VSTART4
- MOVE.B #$2C+10+8*4+8,VSTOP4
- MOVE.B #$2C+10+8*5,VSTART5
- MOVE.B #$2C+10+8*5+8,VSTOP5
- MOVE.B #$2C+10+8*6,VSTART6
- MOVE.B #$2C+10+8*6+8,VSTOP6
- MOVE.B #$2C+10+8*7,VSTART7
- MOVE.B #$2C+10+8*7+8,VSTOP7
-
- ; hier beginnen die "wiederverwendeten" Sprites
-
- MOVE.B #$2C+10+20,VSTART8
- MOVE.B #$2C+10+20+8,VSTOP8
- MOVE.B #$2C+10+20+8*1,VSTART9
- MOVE.B #$2C+10+20+8*1+8,VSTOP9
- MOVE.B #$2C+10+20+8*2,VSTART10
- MOVE.B #$2C+10+20+8*2+8,VSTOP10
- MOVE.B #$2C+10+20+8*3,VSTART11
- MOVE.B #$2C+10+20+8*3+8,VSTOP11
- MOVE.B #$2C+10+20+8*4,VSTART12
- MOVE.B #$2C+10+20+8*4+8,VSTOP12
- MOVE.B #$2C+10+20+8*5,VSTART13
- MOVE.B #$2C+10+20+8*5+8,VSTOP13
- MOVE.B #$2C+10+20+8*6,VSTART14
- MOVE.B #$2C+10+20+8*6+8,VSTOP14
- MOVE.B #$2C+10+20+8*7,VSTART15
- MOVE.B #$2C+10+20+8*7+8,VSTOP15
-
- Mouse2:
- btst #2,$dff016
- bne.s Mouse2
-
-
- move.l OldCop(PC),$dff080 ; Pointen auf die SystemCOP
- move.w d0,$dff088 ; Starten die alte COP
-
- move.l 4.w,a6
- jsr -$7e(a6) ; Enable
- move.l gfxbase(PC),a1
- jsr -$19e(a6) ; Closelibrary
- rts
-
- ; Daten
-
- GfxName:
- dc.b "graphics.library",0,0
-
- GfxBase:
- dc.l 0
-
- OldCop:
- dc.l 0
-
- SECTION GRAPHIC,DATA_C
-
- COPPERLIST:
- SpritePointers:
- dc.w $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
- dc.w $12a,0,$12c,0,$12e,0,$130,0,$132,0
- dc.w $134,0,$136,0,$138,0,$13a,0,$13c,0
- dc.w $13e,0
-
- dc.w $8E,$2c81 ; DiwStrt
- dc.w $90,$2cc1 ; DiwStop
- dc.w $92,$38 ; DdfStart
- dc.w $94,$d0 ; DdfStop
- dc.w $102,0 ; BplCon1
- dc.w $104,0 ; BplCon2
- dc.w $108,0 ; Bpl1Mod
- dc.w $10a,0 ; Bpl2Mod
-
- ; 5432109876543210
- dc.w $100,%0001001000000000
-
- BPLPOINTERS:
- dc.w $e0,0,$e2,0 ;erstes Bitplane
-
- dc.w $180,$000 ; color0 ; schwarzer Hintergrund
- dc.w $182,$123 ; color1 ; Color 1 des Bitplane, das
- ; in diesem Fall leer ist,
- dc.w $1A2,$F00 ; Color17, - Color1 der Sprite0/1 -ROT
- dc.w $1A4,$0F0 ; Color18, - Color2 der Sprite0/1 -GRÜN
- dc.w $1A6,$FF0 ; Color19, - Color3 der Sprite0/1 -GELB
-
- dc.w $1AA,$FFF ; Color21, - Color1 der Sprite2/3 -WEIß
- dc.w $1AC,$0BD ; Color22, - Color2 der Sprite2/3 -WASSER
- dc.w $1AE,$D50 ; Color23, - Color3 der Sprite2/3 -ORANGE
-
- dc.w $1B2,$00F ; Color25, - Color1 der Sprite4/5 -BLAU
- dc.w $1B4,$F0F ; Color26, - Color2 der Sprite4/5 -VIOLETT
- dc.w $1B6,$BBB ; Color27, - Color3 der Sprite4/5 -GRAU
-
- dc.w $1BA,$8E0 ; Color29, - Color1 der Sprite6/7 -HELLGRÜN
- dc.w $1BC,$a70 ; Color30, - Color2 der Sprite6/7 -BRAUN
- dc.w $1BE,$d00 ; Color31, - Color3 der Sprite6/7 -DUNKELROT
-
- dc.w $FFFF,$FFFE ; Ende der Copperlist
-
-
- ; ************ Hier die Sprite: KLARERWEISE in CHIP RAM! ************
-
- ; Referenztabelle zur Definition der Farben:
-
-
- ; per gli sprite 0 ed 1
- ;BINARIO 00=COLORE 0 (TRASPARENTE)
- ;BINARIO 10=COLORE 1 (ROSSO)
- ;BINARIO 01=COLORE 2 (VERDE)
- ;BINARIO 11=COLORE 3 (GIALLO)
-
- MEINSPRITE0: ; Länge13 Zeilen
- VSTART0:
- dc.b 0
- HSTART0:
- dc.b $40+12+0*20
- VSTOP0:
- dc.b $0
- dc.b $00
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111001110001111
- dc.w %0011111111111100,%1100010001000011
- dc.w %0111111111111110,%1000010001000001
- dc.w %0111111111111110,%1000010001000001
- dc.w %0011111111111100,%1100010001000011
- dc.w %0000111111110000,%1111001110001111
- dc.w %0000001111000000,%0111110000111110
- VSTART8:
- dc.b $0
- HSTART8:
- dc.b $40+20+0*12
- VSTOP8:
- dc.b $0
- dc.b $00
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111001110001111
- dc.w %0011111111111100,%1100010001000011
- dc.w %0111111111111110,%1000001110000001
- dc.w %0111111111111110,%1000010001000001
- dc.w %0011111111111100,%1100010001000011
- dc.w %0000111111110000,%1111001110001111
- dc.w %0000001111000000,%0111110000111110
- dc.w 0,0 ; fine sprite
-
-
- MEINSPRITE1: ; Länge13 Zeilen
- VSTART1:
- dc.b $0
- HSTART1:
- dc.b $40+12+1*20
- VSTOP1:
- dc.b $0
- dc.b $00
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111000010001111
- dc.w %0011111111111100,%1100000110000011
- dc.w %0111111111111110,%1000000010000001
- dc.w %0111111111111110,%1000000010000001
- dc.w %0011111111111100,%1100000010000011
- dc.w %0000111111110000,%1111000111001111
- dc.w %0000001111000000,%0111110000111110
- VSTART9:
- dc.b $0
- HSTART9:
- dc.b $40+20+1*12
- VSTOP9:
- dc.b $0
- dc.b $00
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111001110001111
- dc.w %0011111111111100,%1100010001000011
- dc.w %0111111111111110,%1000001110000001
- dc.w %0111111111111110,%1000000001000001
- dc.w %0011111111111100,%1100000001000011
- dc.w %0000111111110000,%1111001110001111
- dc.w %0000001111000000,%0111110000111110
- dc.w 0,0 ; fine sprite
-
- ; per gli sprite 2 e 3
- ;BINARIO 00=COLORE 0 (TRASPARENTE)
- ;BINARIO 10=COLORE 1 (BIANCO)
- ;BINARIO 01=COLORE 2 (ACQUA)
- ;BINARIO 11=COLORE 3 (ARANCIO)
-
- MEINSPRITE2: ; Länge13 Zeilen
- VSTART2:
- dc.b $0
- HSTART2:
- dc.b $40+12+2*20
- VSTOP2:
- dc.b $0
- dc.b $00
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111000111001111
- dc.w %0011111111111100,%1100001000100011
- dc.w %0111111111111110,%1000000000100001
- dc.w %0111111111111110,%1000000111000001
- dc.w %0011111111111100,%1100001000000011
- dc.w %0000111111110000,%1111001111101111
- dc.w %0000001111000000,%0111110000111110
- VSTART10:
- dc.b $0
- HSTART10:
- dc.b $40+20+2*12
- VSTOP10:
- dc.b $0
- dc.b $00
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111000000001111
- dc.w %0011111111111100,%1100010011100011
- dc.w %0111111111111110,%1000110010100001
- dc.w %0111111111111110,%1000010010100001
- dc.w %0011111111111100,%1100111011100011
- dc.w %0000111111110000,%1111000000001111
- dc.w %0000001111000000,%0111110000111110
- dc.w 0,0 ; fine sprite
-
- MEINSPRITE3: ; Länge13 Zeilen
- VSTART3:
- dc.b $0
- HSTART3:
- dc.b $40+12+3*20
- VSTOP3:
- dc.b 0
- dc.b $00
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111001111101111
- dc.w %0011111111111100,%1100000000100011
- dc.w %0111111111111110,%1000000111100001
- dc.w %0111111111111110,%1000000000100001
- dc.w %0011111111111100,%1100000000100011
- dc.w %0000111111110000,%1111001111101111
- dc.w %0000001111000000,%0111110000111110
- VSTART11:
- dc.b $0
- HSTART11:
- dc.b $40+20+3*12
- VSTOP11:
- dc.b $0
- dc.b $00
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111000000001111
- dc.w %0011111111111100,%1100010001000011
- dc.w %0111111111111110,%1000110011000001
- dc.w %0111111111111110,%1000010001000001
- dc.w %0011111111111100,%1100111011100011
- dc.w %0000111111110000,%1111000000001111
- dc.w %0000001111000000,%0111110000111110
- dc.w 0,0 ; fine sprite
-
- ; per gli sprite 4 e 5
- ;BINARIO 00=COLORE 0 (TRASPARENTE)
- ;BINARIO 10=COLORE 1 (BLU)
- ;BINARIO 01=COLORE 2 (VIOLA)
- ;BINARIO 11=COLORE 3 (GRIGIO)
-
- MEINSPRITE4: ; Länge13 Zeilen
- VSTART4:
- dc.b $0
- HSTART4:
- dc.b $40+12+4*20
- VSTOP4:
- dc.b $0
- dc.b $00
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111001001001111
- dc.w %0011111111111100,%1100001001000011
- dc.w %0111111111111110,%1000001111000001
- dc.w %0111111111111110,%1000000001000001
- dc.w %0011111111111100,%1100000001000011
- dc.w %0000111111110000,%1111000001001111
- dc.w %0000001111000000,%0111110000111110
- VSTART12:
- dc.b $0
- HSTART12:
- dc.b $40+20+4*12
- VSTOP12:
- dc.b $0
- dc.b $00
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111000000001111
- dc.w %0011111111111100,%1100010011000011
- dc.w %0111111111111110,%1000110001000001
- dc.w %0111111111111110,%1000010010000001
- dc.w %0011111111111100,%1100111011100011
- dc.w %0000111111110000,%1111000000001111
- dc.w %0000001111000000,%0111110000111110
- dc.w 0,0 ; fine sprite
-
- MEINSPRITE5: ; Länge13 Zeilen
- VSTART5:
- dc.b $0
- HSTART5:
- dc.b $40+12+5*20
- VSTOP5:
- dc.b $0
- dc.b $0
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111001111001111
- dc.w %0011111111111100,%1100001000000011
- dc.w %0111111111111110,%1000001111000001
- dc.w %0111111111111110,%1000000001000001
- dc.w %0011111111111100,%1100000001000011
- dc.w %0000111111110000,%1111001111001111
- dc.w %0000001111000000,%0111110000111110
- VSTART13:
- dc.b $0
- HSTART13:
- dc.b $40+20+5*12
- VSTOP13:
- dc.b $0
- dc.b $00
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111000000001111
- dc.w %0011111111111100,%1100010011100011
- dc.w %0111111111111110,%1000110001100001
- dc.w %0111111111111110,%1000010000100001
- dc.w %0011111111111100,%1100111011000011
- dc.w %0000111111110000,%1111000000001111
- dc.w %0000001111000000,%0111110000111110
- dc.w 0,0 ; fine sprite
-
- ; per gli sprite 6 e 7
- ;BINARIO 00=COLORE 0 (TRASPARENTE)
- ;BINARIO 10=COLORE 1 (VERDE CHIARO)
- ;BINARIO 01=COLORE 2 (MARRONE)
- ;BINARIO 11=COLORE 3 (ROSSO SCURO)
-
- MEINSPRITE6: ; Länge13 Zeilen
- VSTART6:
- dc.b $0
- HSTART6:
- dc.b $40+12+6*20
- VSTOP6:
- dc.b $0
- dc.b $00
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111001111001111
- dc.w %0011111111111100,%1100001000000011
- dc.w %0111111111111110,%1000001111000001
- dc.w %0111111111111110,%1000001001000001
- dc.w %0011111111111100,%1100001001000011
- dc.w %0000111111110000,%1111001111001111
- dc.w %0000001111000000,%0111110000111110
- VSTART14:
- dc.b $0
- HSTART14:
- dc.b $40+20+6*12
- VSTOP14:
- dc.b $0
- dc.b $00
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111000000001111
- dc.w %0011111111111100,%1100010000100011
- dc.w %0111111111111110,%1000110010100001
- dc.w %0111111111111110,%1000010011100001
- dc.w %0011111111111100,%1100111001000011
- dc.w %0000111111110000,%1111000000001111
- dc.w %0000001111000000,%0111110000111110
- dc.w 0,0 ; fine sprite
-
- MEINSPRITE7: ; Länge13 Zeilen
- VSTART7:
- dc.b 0
- HSTART7:
- dc.b $40+12+7*20
- VSTOP7:
- dc.b $0
- dc.b $0
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111001111001111
- dc.w %0011111111111100,%1100000001000011
- dc.w %0111111111111110,%1000000001000001
- dc.w %0111111111111110,%1000000001000001
- dc.w %0011111111111100,%1100000001000011
- dc.w %0000111111110000,%1111000001001111
- dc.w %0000001111000000,%0111110000111110
- VSTART15:
- dc.b $0
- HSTART15:
- dc.b $40+20+7*12
- VSTOP15:
- dc.b $0
- dc.b $00
- dc.w %0000001111000000,%0111110000111110
- dc.w %0000111111110000,%1111000000001111
- dc.w %0011111111111100,%1100010011100011
- dc.w %0111111111111110,%1000110011000001
- dc.w %0111111111111110,%1000010000100001
- dc.w %0011111111111100,%1100111011100011
- dc.w %0000111111110000,%1111000000001111
- dc.w %0000001111000000,%0111110000111110
- dc.w 0,0 ; Ende Sprite
-
- SECTION LEERESPLANE,BSS_C ; Ein auf 0 gesetztes Bitplane, wir
- ; müssen es verwenden, denn ohne Bitplane
- ; ist es nicht möglich, die Sprites
- ; zu aktivieren
- BITPLANE:
- ds.b 40*256 ; Bitplane auf 0 Lowres
-
- end
-
-
- In diesem Listing wird gezeigt, wie man die Sprites mehrmals auf dem
- gleichen Screen wiederverwenden kann. Im Beispiel wird jeder Sprite zwei
- Mal recycelt.
-
- Der Sprite 0 wird wiederverwendet um Sprite 8 zu zeichnen.
- Der Sprite 1 wird wiederverwendet um Sprite 9 zu zeichnen.
- Der Sprite 2 wird wiederverwendet um Sprite 10 zu zeichnen.
- Der Sprite 3 wird wiederverwendet um Sprite 11 zu zeichnen.
- Der Sprite 4 wird wiederverwendet um Sprite 12 zu zeichnen.
- Der Sprite 5 wird wiederverwendet um Sprite 13 zu zeichnen.
- Der Sprite 6 wird wiederverwendet um Sprite 14 zu zeichnen.
- Der Sprite 7 wird wiederverwendet um Sprite 15 zu zeichnen.
-
- Bemerkt ihr, daß bei der Wiederverwendung eines Sprites, dieser am
- Bildschrim TIEFER dargestellt wird, als es die letzte Zeile bei seiner
- ersten Anzeige war? Das ist einem bestimmten Hardwarelimit zuzuschreiben.
- Zwischen einer Verwendung und der nächtsten muß MINDESTENS eine leere
- Zeile dazwischenliegen.
-
-
- Das Byte VSTART des Sprite 8 muß GRÖßER sein als VSTOP des Sprite 0
- Das Byte VSTART des Sprite 9 muß GRÖßER sein als VSTOP des Sprite 1
- Das Byte VSTART des Sprite 10 muß GRÖßER sein als VSTOP des Sprite 2
- Das Byte VSTART des Sprite 11 muß GRÖßER sein als VSTOP des Sprite 3
- Das Byte VSTART des Sprite 12 muß GRÖßER sein als VSTOP des Sprite 4
- Das Byte VSTART des Sprite 13 muß GRÖßER sein als VSTOP des Sprite 5
- Das Byte VSTART des Sprite 14 muß GRÖßER sein als VSTOP des Sprite 6
- Das Byte VSTART des Sprite 15 muß GRÖßER sein als VSTOP des Sprite 7
-
- Die Wiederverwendung eines Sprite ändert die Farbregister nicht, die ihm
- zugeteilt sind.
- Ihr bemerkt sicher, daß die Farben eines "wiederverwendeten" Sprites die
- gleichen sind wie die des "Orginals". Da die Sprites aber auf
- verschiedenen Höhen liegen hindert uns nichts daran, deren Farben mit dem
- Copper zu verändern, während wir uns z.B in der "leeren" Zeile befinden.
- Ihr könnt es als Übung mal versuchen.
-
-